Computer systems used in various processing applications, such as processing insurance information, account information, inventory information, investment information, retirement information, as well as many other applications, often operate with records and data containing date-dependent information. In many computing systems, date information relating to years has been represented in two-digit year format, wherein the two digits represent a year between 1900 and 1999. Thus, for example, the digits "98" would represent the year 1998. Popular usage of this simplified date information format throughout the computer industry has resulted in an industry-recognized problem, often referred to as the "year 2000 problem" or the "y2k" problem.
The problem results from this simplification of date information. Namely, upon the turn-of-the-century (i.e., year 2000) two-digit year information intended to represent a year within the 21st Century will be indistinguishable within such computer systems from a year within the 20th Century. For example, a two-digit year value of "08" which is intended to represent the year 2008 will be indistinguishable from the year 1908 by such systems. More specifically, year-2000 problems occur when calculations cross the year-2000 boundary. For example, calculating two years beyond the year 1999 (represented as "99") yields an arithmetically correct result of 101, but a computer program may truncate this to 01 since only two digits have traditionally been allowed. As a further example, the comparison of the year 1999 (represented as "99") against 2000 (represented as "00") may yield the result that a date in the year 1999 is after (i.e., arithmetically greater) than the year 2000.
Various solutions to the "year-2000 problem" have been suggested. Defining the term "year-2000 compliant" as the ability to recognize accurately dates both before and after Jan. 1, 2000, there are essentially four methods of achieving software compliance that have been commonly recognized. They are: (1) date expansion; (2) clock modification; (3) windowing; and (4) date modification. Briefly, described "date expansion" directs a user to survey each computer program and database to identify every location where dates or equivalent data compressions are in use and reformat each instance to use four instead of two digits. "Clock modification" involves changing all years in an existing database and the system clock by deducting 28 years. The reason for the use of 28 is that the calendar resets itself completely every 28 years. The "windowing" technique assumes the century of a two-digit year by comparing it to an arbitrary window of 100 years. Finally, "date modification" involves changing the symbolic system used to represent different years so as to accommodate more than the traditional 100 numbers in the two digits allocated for that purpose. For example, letters of the alphabet can be selectively substituted for numbers to expand the representation of the two digits.
The above-summarized tools currently used in the year-2000 remediation efforts are predominantly source-based and focus on identifying date variables. For example, the variable names in the application source code are examined seeking names that contain date-related parts such as YEAR, YR, YY, MONTH, MM, DAY, DD, DDD, etc. Such tools list all variables and indicate which statements possess them, however, they often miss any date variable that has a non-descriptive or obscure name, and they do not indicate which instructions will fail when confronted by year-2000 dates.
Therefore, a need exists in the "y2k problem" art for a new technique for identifying specific object-code instructions that may fail when confronted by a year-2000 date, instead of identifying source statements that process such dates, and secondly, for such a technique which does not rely on the use of appropriate variable names to identify the dates, but rather uses execution characteristics of the data itself.